#include <string>
#include <vector>

using namespace std;

int main()
{
    int *pi1 = new int; // pi 指向一个动态分配的、未初始化的无名对象
    
    string *ps2 = new string;    // 初始化为空 string
    int *pi2 = new int;          // pi 指向一个未初始化的 int

    int *pi3 = new int(1024);            // pi 指向的对象的值为 1024
    string *ps3 = new string(10, '9');   // *ps 为 "9999999999"

    // vector 有 10 个元素，值依次从 0 到 9
    vector<int> *pv = new vector<int>{0, 1, 2, 3, 4, 5, 6, 7, 8, 9};

    string *ps4 = new string;           // 默认初始化为空 string
    string *ps5 = new string();         // 值初始化为空 string
    int *pi4 = new int;                 // 默认初始化；*pi4 的值未定义
    int *pi5 = new int();               // 值初始化为 0；*pi5 为 0

    // auto p1 = new auto(obj);        // p 指向一个与 obj 类型相同的对象
    //                                 // 该对象用 obj 进行初始化
    // auto p2 = new auto{a, b, c};    // 错误：括号中只能有单个初始化器

    // 分配并初始化一个 const int
    const int *pci = new const int(1024);
    // 分配并默认初始化一个 const 的空 string
    const string *pcs = new const string;

    // 如果分配失败（内存耗尽），new 返回一个空指针
    int *p1 = new int; // 如果分配失败，new 抛出 std::bad_alloc
    int *p2 = new (nothrow) int; // 如果分配失败，new 返回一个空指针
}